home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 December / PCWorld_2006-12_cd.bin / v cisle / ophcrack / ophcrack-win32-installer-2.3.3.exe / {app} / src / make_hash.c < prev    next >
C/C++ Source or Header  |  2006-10-10  |  3KB  |  90 lines

  1. /*
  2.  
  3.     Ophcrack is a Lanmanager/NTLM hash cracker based on the faster time-memory
  4.     trade-off using rainbow tables. 
  5.     
  6.     Created with the help of: Maxime Mueller, Luca Wullschleger, Claude
  7.     Hochreutiner, Andreas Huber and Etienne Dysli.
  8.  
  9.     Copyright 2006 Philippe Oechslin, Cedric Tissieres
  10.  
  11.     Ophcrack is free software; you can redistribute it and/or modify
  12.     it under the terms of the GNU General Public License as published by
  13.     the Free Software Foundation; either version 2 of the License, or
  14.     (at your option) any later version.
  15.  
  16.     Ophcrack is distributed in the hope that it will be useful,
  17.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  18.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  19.     GNU General Public License for more details.
  20.  
  21.     You should have received a copy of the GNU General Public License
  22.     along with Ophcrack; if not, write to the Free Software
  23.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  24.  
  25.     This program is released under the GPL with the additional exemption 
  26.     that compiling, linking, and/or using OpenSSL is allowed.
  27. */
  28.  
  29. /* LanManager hash functions (libdes version and Jack the ripper MMX version) */
  30.  
  31. /* 
  32.  * $Log: make_hash.c,v $
  33.  * Revision 2.0  2005/03/24 tissieres
  34.  * Modified for win32
  35.  *
  36.  * Revision 1.0  2004/07/09 12:54:15  oechslin
  37.  * Initial revision
  38.  *
  39.  */
  40.  
  41. #include "make_hash.h"
  42. #include <openssl/ssl.h> 
  43. #include <openssl/des.h>
  44. #include <openssl/md4.h>
  45. #include <string.h>
  46. #ifndef WIN32
  47. #include <netinet/in.h>
  48. #else /* WIN32 */
  49. #include <winsock.h>
  50. #endif /* WIN32 */
  51.  
  52.  
  53. unsigned char magic[] = { 0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 };
  54.  
  55. void make_hash(unsigned char *str, unsigned char  *out) {
  56.  
  57.     static unsigned char key[8];
  58.     des_key_schedule ks;
  59.  
  60.     key[0]=str[0];
  61.     key[1]=  (str[0] << 7) | (str[1] >> 1);
  62.     key[2] = (str[1] << 6) | (str[2] >> 2);
  63.     key[3] = (str[2] << 5) | (str[3] >> 3);
  64.     key[4] = (str[3] << 4) | (str[4] >> 4);
  65.     key[5] = (str[4] << 3) | (str[5] >> 5);
  66.     key[6] = (str[5] << 2) | (str[6] >> 6);
  67.     key[7] = (str[6] << 1) ;
  68.     des_set_odd_parity(&key);
  69.     des_set_key(&key, ks);
  70.     des_ecb_encrypt((des_cblock *)magic, (des_cblock *)out, ks, DES_ENCRYPT);
  71. }
  72.  
  73. void make_nthash(char *pw, char *out) {
  74.   size_t unipwlen;
  75.   unsigned short int unipw[128];
  76.   unsigned char *s;
  77.   MD4_CTX ctx;
  78.  
  79.   /* convert to unicode */
  80.   for (unipwlen = 0, s = (unsigned char *)pw; unipwlen < strlen(pw); s++) {
  81.     unipw[unipwlen++] = htons(*s << 8);
  82.   }
  83.  
  84.   /* Compute MD4 of Unicode password */
  85.   MD4_Init(&ctx);
  86.   MD4_Update(&ctx, (unsigned char *) unipw, unipwlen * sizeof(*unipw));
  87.   MD4_Final((unsigned char *)out, &ctx);
  88.  
  89. }
  90.